package yaner.hotel.manager.resource.mapper.impl;

import org.springframework.stereotype.Component;
import yaner.hotel.manager.common.dto.menu.MenuAddDto;
import yaner.hotel.manager.common.dto.menu.MenuUpdateDto;
import yaner.hotel.manager.common.utils.SnowUtils;
import yaner.hotel.manager.common.vo.MenuVo;
import yaner.hotel.manager.resource.entity.Menu;
import yaner.hotel.manager.resource.mapper.IMenuMapper;

import java.util.Date;
import java.util.Objects;

@Component
public class MenuMapperImpl implements IMenuMapper {
    @Override
    public MenuVo toVo(Menu menu) {
        Objects.requireNonNull(menu, "MenuMapperImpl toVo menu is null");
        return MenuVo.builder()
                .id(menu.getId())
                .parentId(menu.getParentId())
                .menuName(menu.getMenuName())
                .menuType(menu.getMenuType())
                .menuCode(menu.getMenuCode())
                .menuIcon(menu.getMenuIcon())
                .menuUrl(menu.getMenuUrl())
                .status(menu.getStatus())
                .createTime(menu.getCreateTime())
                .updateTime(menu.getUpdateTime())
                .build();
    }

    @Override
    public Menu toAddEntity(MenuAddDto menuAddDto) {
        Objects.requireNonNull(menuAddDto, "MenuMapperImpl toAddEntity menuAddDto is null");
        return Menu.builder()
                .id(SnowUtils.nextId())
                .parentId(menuAddDto.getParentId())
                .menuName(menuAddDto.getMenuName())
                .menuType(menuAddDto.getMenuType())
                .menuCode(menuAddDto.getMenuCode())
                .menuUrl(menuAddDto.getMenuUrl())
                .menuIcon(menuAddDto.getMenuIcon())
                .sortNo(menuAddDto.getSortNo())
                .status(menuAddDto.getStatus())
                .createTime(new Date())
                .updateTime(new Date())
                .build();
    }

    @Override
    public Menu toUpdateEntity(MenuUpdateDto menuUpdateDto) {
        Objects.requireNonNull(menuUpdateDto, "MenuMapperImpl toUpdateEntity menuUpdateDto is null");
        return Menu.builder()
                .id(menuUpdateDto.getId())
                .parentId(menuUpdateDto.getParentId())
                .menuName(menuUpdateDto.getMenuName())
                .menuType(menuUpdateDto.getMenuType())
                .menuCode(menuUpdateDto.getMenuCode())
                .menuIcon(menuUpdateDto.getMenuIcon())
                .menuUrl(menuUpdateDto.getMenuUrl())
                .status(menuUpdateDto.getStatus())
                .updateTime(new Date())
                .build();
    }
}
